package web.controller.user;

import common.consts.Consts;
import common.consts.ContentType;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import service.RecruitmentService;
import service.ServiceResponse;
import web.Routes;
import web.controller.Base;
import web.security.Protection;

/**
 * Created by aceyin on 15/7/6.
 * 查看所有招聘信息。
 */
@RestController("userRecruitment")
@RequestMapping(Routes.User.RECRUITMENT)
public class Recruitment extends Base {

    @Autowired
    private RecruitmentService recruitmentService;

    /**
     * <p>
     * 根据用户设定的条件，列出符合条件的所有招聘信息.
     * 不管指定其他条件与否，都最多只会列出用户当前所属/所选城市的招聘信息。
     * 如果无法获取用户所在的城市，则会返回错误提示：无法获取用户的地理位置信息。
     * </p>
     * <p>
     * 如果有带 id 参数，则返回指定的 招聘信息.
     * 如果没有 id 参数则:
     * <ul>
     * <li>如果有 group    则根据 group + city 列出所有符合group条件的招聘信息，并根据距离排序</li>
     * <li>如果有 district 则根据 district + city 列出指定行政区所有招聘信息，并根据距离(由lat和lng计算得来)排序(由进到远)</li>
     * <li>如果有 type     则根据 city + type 列出指定行政区所有的招聘信息，并根据距离(由lat和lng计算得来)排序(由进到远)</li>
     * </ul>
     * group 和 district,type 不会同时出现。
     * group 请求来自于首页的『自定义分组』查询，district,type来自于『招聘列表页的筛选』
     * </p>
     *
     * @param id
     * @param page
     * @return
     */
    @Protection
    @RequestMapping(method = RequestMethod.GET, produces = ContentType.JSON)
    public ServiceResponse view(@RequestParam(value = "id", defaultValue = "0") int id,
                                @RequestParam(value = "city", defaultValue = "") String city,//required
                                @RequestParam(value = "group", defaultValue = "") String group,//自定义分组
                                @RequestParam(value = "type", defaultValue = "") String type,//工种
                                @RequestParam(value = "district", defaultValue = "") String district,//行政区
                                @RequestParam(value = "page", defaultValue = "1") int page) {

        long user = getUserIdFromAuthHeader();
        //如果有ID则根据ID优先查
        if (id > 0) {
            return recruitmentService.getRecruitment4User(user, id);
        }
        if (StringUtils.isBlank(city)) {
            return ServiceResponse.fail(Consts.i18nKey.UNKNOWN_CITY);
        }
        //如果有group，则说明请求来自于首页的『自定义分组』
        if (StringUtils.isNotBlank(group)) {
            return recruitmentService.find4UserByGroup(user, city, group, page);
        }
        //如果有district,type则根据district,type筛选
        if (StringUtils.isNotBlank(type) | StringUtils.isNotBlank(district)) {
            return recruitmentService.find4UserByTypeOrDistrict(user, city, type, district, page);
        }
        //如果没有带参数，则默认查出当前城市所有的招聘信息
        return recruitmentService.find4UserWithoutCondition(user, city, page);
    }
}
